home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
tcl
/
tclm_1_0.lha
/
tclm-1.0
/
mrecord
< prev
next >
Wrap
Text File
|
1993-08-16
|
4KB
|
155 lines
#!/usr/local/bin/tclm -f
#
# Copyright (c) 1993 Michael B. Durian. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
# must display the following acknowledgement:
# This product includes software developed by Michael B. Durian.
# 4. The name of the the Author may be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# mrecord,v 1.1 1993/05/06 02:51:08 durian Exp
if {! [midiplayable]} {
puts stderr [concat "Cannot record. Tclm was not compiled with the " \
"record functionality turned on."]
exit 1
}
set repeat {}
set tracks {}
set speed {}
set play ""
set reltempo ""
set rec_file_name ""
set play_file_name ""
proc parse_arg {args} {
global repeat
global tracks
global speed
global play_file_name
global rec_file_name
# strip away extra {}'s
set argv [lindex $args 0]
set argc [llength $argv]
if {$argc > 1 && [string compare [lindex $argv 0] "-f"] == 0} {
incr argc -2
set argv [lrange $argv 2 end]
}
for {set i 0} {$i < $argc} {incr i} {
set arg [lindex $argv $i]
case $arg in \
-repeat {
set repeat repeat
} -tracks {
set tracks [lindex $argv [incr i]]
} -speed {
set speed [lindex $argv [incr i]]
} -pfile {
set play_file_name [lindex $argv [incr i]]
} default {
if {[string length $rec_file_name] != 0} {
Usage
} else {
set rec_file_name [lindex $argv $i]
}
}
}
}
proc Usage {} {
puts stderr {Usage: mrecord [-pfile play_file [-repeat] \
[-tracks track_list] [-speed speed]] record_file}
exit 1
}
parse_arg $argv
set background ""
set rmfile [midimake]
midiconfig $rmfile format 0
midiconfig $rmfile tracks 1
if {[string length $play_file_name] == 0} {
if {[string length $repeat] != 0} {
Usage
}
if {[string length $tracks] != 0} {
Usage
}
if {[string length $speed] != 0} {
Usage
}
set pfile ""
set pmfile ""
set background background
} else {
if {[string length $repeat] != 0} {
set background background
}
if {[llength $tracks] != 0} {
set tracks "tracks \"$tracks\""
} else {
set tracks ""
}
if {[string length $speed] != 0} {
set reltempo "reltempo $speed"
} else {
set reltempo ""
}
set pfile [open $play_file_name "r"]
set pmfile [midiread $pfile]
close $pfile
set play "play $pmfile"
midiconfig $rmfile division [midiconfig $pmfile division]
}
if {[string length $background] == 0} {
eval "midirecord $background $play $repeat $tracks $reltempo $rmfile"
} else {
set pid [eval \
"midirecord $background $play $repeat $tracks $reltempo $rmfile"]
puts stdout "Press return to stop recording"
gets stdin
midistop $pid $rmfile
}
midiput $rmfile 0 0 metaeot
set rfile [open $rec_file_name "w"]
midiwrite $rmfile $rfile
close $rfile
if {[string length $pmfile] != 0} {
midifree $pmfile
}
midifree $rmfile
exit 0